package com.manda.smart.hub.common.chain;

/**
 * @author hongda.li
 */
public class ChainBuilder<Context> {
    /**
     * 头节点
     */
    private Chain<Context> head;
    /**
     * 尾节点
     */
    private Chain<Context> tail;

    /**
     * 构建一个普通的链式构建器
     *
     * @param <Context> 上下文泛型
     * @return 链式构建器
     */
    public static <Context> ChainBuilder<Context> newBuilder() {
        return new ChainBuilder<>();
    }

    /**
     * 链式构建
     *
     * @param chain 链式处理器
     * @return 链式调用
     */
    public ChainBuilder<Context> nextChain(Chain<Context> chain) {
        if (this.head == null) {
            this.head = this.tail = chain;
        } else {
            this.tail.setNext(chain);
            this.tail = this.tail.getNext();
        }
        return this;
    }

    /**
     * 构建最终链结构
     * 返回头节点
     *
     * @return 最终链式结构
     */
    public Chain<Context> build() {
        return this.head;
    }
}
